<?php
class UsersController extends AppController {
	var $name = 'Users';
	var $components = array ('Pagination');
	var $helpers = array('Html','Form','Accessibility','Pagination','Box');
	var $uses = array('User','Message','Noticia','Unit');

	function index() {
		$title = 'Usuarios';
		$this->set('title', $title);
		$this->set('pageTitle', $title);

		$users = $this->User->find('all');
		$this->set('users', $users);
	}

	function view( $id=null ) {
		if (!$id) $this->redirect('/users');
		$this->set('title','Visualizar user');
		$this->User->id = $id;
		$this->set('user', $this->User->read());
		$user = $this->User->read();

		if($user["User"]["type"] == "employee")
		{
			$func = new Employee();
			$funcionario = $func->find(array('user_id' => $id));
			$this->redirect('/employees/view/'.$funcionario['Employee']['id']);
		}

		if($user["User"]["type"] == "volunteer")
		{
			$volunt = new Volunteer();
			$voluntario = $volunt->find(array('user_id' => $id));
			$this->redirect('/volunteers/view/'.$voluntario['Volunteer']['id']);
		}

	}

	function add() {
		$title = 'Cadastrar usuario';
		$this->set('title', $title);
		$this->set('pageTitle', $title);

		$this->set('groups', $this->User->Group->find('list'));

		$this->set('unidades', $this->User->Unidade->find('list',
							array('fields'=>array('id','nome'))));

		if (!empty($this->data)) {
			if ($this->User->save($this->data)) {
				$_SESSION['mensagem']['success'][] = 'User cadastrado com sucesso!';
			} else {
				$_SESSION['mensagem']['error'][] = 'Erro ao tentar cadastrar o user.';
			}
			$this->redirect('/users');
		}
	}

	function edit( $id=null) {
		if (!$id) $this->redirect('/users');

		$title = 'Editar usuario';
		$this->set('title', $title);
		$this->set('pageTitle', $title);

		$this->set('groups', $this->User->Group->find('list'));

		$this->set('unidades', $this->User->Unidade->find('list',
							array('fields'=>array('id','nome'))));

		$this->User->id = $id;
		if (empty($this->data)) {
			$this->data = $this->User->read();
		} else {
			if ($this->User->save($this->data['User'])) {
				$_SESSION['mensagem']['success'][] = 'User alterado com sucesso!';
			} else {
				$_SESSION['mensagem']['error'][] = 'Erro ao tentar alterar o user.';
			}
			$this->redirect('/users');
		}
		$user = $this->User->find(array('`User`.id' => $id));
		$this->set('user', $user);
	}

	function delete($id) {
		if (!$id) $this->redirect('/users');
		if ($this->User->del($id)) {
			$_SESSION['mensagem']['success'][] = 'User excluido com sucesso!';
		} else {
			$_SESSION['mensagem']['error'][] = 'Erro ao tentar excluir o user.';
		}
		$this->redirect('/users');
	}

	function login() {
		$us = 'othAuth.'.$this->othAuth->hashkey;
		if ($this->Session->valid() && $this->Session->check($us))  {
			$this->redirect('/users/home');
		} 
		else {
			if(isset($this->params['data'])) {
				$auth_num = $this->othAuth->login($this->params['data']['User']);
				$this->set('auth_msg', $this->othAuth->getMsg($auth_num));
			}
		}
	}

	function logout() {
		$this->othAuth->logout();
		$this->flash('Você saiu do sistema.','/users/login');
	}

	function noaccess() {
		$this->flash("Você não tem acesso a esta página.",'/users/home');
	}

	function photo ($id) {
		$this->User->id = $id;
		$this->set('user', $this->User->read());
	}

	function home() {
				
		$group = $this->othAuth->getData('group');
		$level =$group['level'];
		
		if ($level >= 100) {  // not system admin
			$this->estatisticas();
			$this->mensagens();
		}

		$this->noticias();
	}

	function estatisticas() {

		// Recuperando ID do usuário logado
		$userData = $this->othAuth->getData('user');
		$id_user = $userData['id'];

		// Recuperando da entidade do ID do usuário logado
		$orgData = $this->othAuth->getData('organization');
		$id_org = $orgData['id'];

		// Obtendo número de unidades da entidade
		$orgObj = $this->User->Unit->Organization;
		$array_units = $this->Unit->find('all',array("conditions" => array('organization_id'=>$id_org)));
		$total_unidades = count($array_units);


		// Obtendo número de assistidos atendidos pela entidade
		$total_assistidos = 0;
		foreach($array_units as $unit)
		{
			// Obtendo ID da unidade
			$id_unit = $unit['Unit']['id'];

			// Obtendo números da unidade
			$assistidos_unit = $this->Unit->Assistido->findCount(array('unit_id'=>$id_unit));

			// Atualizando totais
			$total_assistidos   += $assistidos_unit;
		}

		$employees = $this->User->Employee->query(
			'SELECT DISTINCT Employee.id, User.name, User.id'.
			' FROM employees as Employee'.
			' INNER JOIN users as User ON Employee.user_id = User.id'.
			' INNER JOIN units_users as UnitUser ON User.id = UnitUser.user_id'.
			' INNER JOIN units as Unit ON UnitUser.unit_id = Unit.id'.
			' WHERE 1 = 1 AND Unit.organization_id = '.$id_org
			);
		$total_funcionarios = count($employees);

		$volunteers = $this->User->Employee->query(
			'SELECT DISTINCT Volunteer.id, User.name, User.id'.
			' FROM volunteers as Volunteer'.
			' INNER JOIN users as User ON Volunteer.user_id = User.id'.
			' INNER JOIN units_users as UnitUser ON User.id = UnitUser.user_id'.
			' INNER JOIN units as Unit ON UnitUser.unit_id = Unit.id'.
			' WHERE 1 = 1 AND Unit.organization_id = '.$id_org
			);
		$total_voluntarios = count($volunteers);

		$this->set('total_voluntarios',$total_voluntarios);
		$this->set('total_funcionarios',$total_funcionarios);
		$this->set('total_assistidos',$total_assistidos);
		$this->set('total_unidades',$total_unidades);

	}

	function mensagens(){

		// Recuperando ID do usuário logado
		$userData = $this->othAuth->getData('user');
		$id_user = $userData['id'];

		// Filtrando mensagens enviadas para o usuário
		$messages = $this->Message->find('all',array('conditions'=>array('to_id'=>$id_user),'limit'=>5, 'order'=>'`Message`.created DESC'));


		$this->set('messages',$messages);

	}

	function noticias(){
		// Permissao: se pode visualizar todas as unidades
		$group = $this->othAuth->getData('group');
		$level =$group['level'];
		$unitUser = $this->othAuth->getData('unit');
		$conditions1 = array();
		if ($level >= 100) {  // not system admin
			$conditions1[] = array("organization_id"=>$unitUser['0']['Organization']['id'],"published"=>true);
		}
		// Recuperando notícias da Entidade
		$noticias_geral = $this->User->Noticia->find('all',array("conditions"=>$conditions1,"limit"=>5,"order"=>"Noticia.Publishedon DESC"));

		$this->set('noticias_geral',$noticias_geral);

	}


}
